package com.cskaoyan.javase.array._0introduction;
/**
 * 数组的引入
 * 如果程序需要多少数据，就要定义多少个变量，也太过于麻烦了，并且多个变量单独存在没有任何关联，也不方便管理和维护。
 *
 * 这样就好比，去超市购物，谁有人会把东西一个一个带回家。
 * 购物需要"袋子"装东西，Java变量也需要一个容器来存放它们。
 * Java的容器有很多，最基本的容器就是数组（Array），定义一个数组，就可以存储很多数据。
 * 数组是存储数据的容器，是Java中最基础的容器。（高级容器——集合）
 *
 * 定义：
 *      数组是存储多个，具有相同数据类型的数据元素的有序容器（集合）。
 * 定义中的重点是：
 *      1.能够存储多个数据元素
 *      2.这些数据元素的数据类型，必须一致（数组重要特点）
 *      3.这些数据是有序的：
 *              数组中的每个存储单元，都有唯一编号(下标)
 *              该编号，从左向右，从0开始编号，最大值是数组长度-1
 *        这种编号，专业的术语称之为下标或者索引（index）
 *
 * 补充：
 *      1.数组作为一种容器，它本身也是一个变量，是一种引用数据类型变量。数组是典型的引用数据类型
 *      2.数组里面，可以存储基本数据类型，也可以存储引用数据类型，但是一个数组里面只能存储同一种数据类型。
 *      3.数组的类型由数组中存储的元素的类型决定。
 *          比如String数组就存String字符串
 *          比如int数组就存int整数
 *
 *
 * 数组的优缺点
 * 优点：随机访问（存取）
 *      访问n位置的元素，无需经过前面(n-1)个元素，访问效率是非常高的
 *      时间复杂度是常数级别 O(1)
 *
 * 得到了这么大的好处,优点，那么代价是什么？（缺点）
 *      1.数组的存储空间必须是连续的，每个存储单元都互相关联。
 *          这意味着数组对内存空间的要求非常高，必须给数组找到一块连续的空间存储数组
 *          -->
 *          数组的存储空间都需要事先规划好,并且开辟空间后,就不可更改了
 *          -->
 *          数组一旦创建,它的长度是固定的,除非销毁这个数组,否者绝对不可能发生变化
 *          -->
 *          这是非常大的一个缺点,要求使用数组之前必须事先规划好数组长度,短了不够用,长了浪费空间
 *          -->
 *          实际开发中,数组很少直接使用,几乎不会直接使用数组
 *          (但是数组是Java容器的基础)
 *          -->
 *          实际开发中既然不直接用数组,那用什么呢?
 *          利用优点,规避缺点
 *          数组的最大问题实际上是长度不可变
 *          --> 如果能够创造出一种长度可自由变化,又有下标,能够随机访问的数组,肯定是极好的
 *          --> 有,先创建一个数组,存储元素,如果数组的长度不够用了,那就重新创建一个更长的数组,把之前的元素全部拷贝过去
 *              于是实现了"可变长度的数组"(实际上是通过数组元素的拷贝实现的,数组的长度没有真正变化)
 *              这就是Java高级容器,最常用的集合类——ArrayList
 *
 *     2.为了让寻址公式能够连续的进行准确运算,必须要求数组的每个存储单元大小是一致的
 *          -->
 *          数组要求存储的元素数据类型必须一致
 *
 * 扩展:
 *      为什么数组的下标要从0开始?
 *      从1开始更符合人类的习惯,为什么非要从0开始呢?
 *      为什么计算机存储有符号数使用补码呢?
 *
 *      站在计算机的角度思考,提高计算机的运算效率(当然人就要适应计算机的思维)
 *
 *
 * @since 11:06
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}
